无法读取未定义的 属性 'importKey',没有 ssl 的 Web Crypto API
Cannot read property 'importKey' of undefined, Web Crypto API without ssl
我正在使用
window.crypto.subtle.importKey
在本地主机上,它工作正常。但是当我将代码放在服务器上时,出现错误无法读取未定义的 属性 importKey。据我所知,我没有在安全的 https 连接中使用它。因此它显示错误。我在 Chrome 中检查了这个问题 crypto.subtle 是否存在不安全来源
如何为 Chrome 中的不安全来源启用 crypto.subtle?
有没有其他方法可以解决这个问题?
这是代码
var contents = e.target.result;//Data from the PKCS#12 file input
var pkcs12Der = arrayBufferToString(contents)
var pkcs12B64 = forge.util.encode64(pkcs12Der);
var pkcs12Der = forge.util.decode64(pkcs12B64);
var pkcs12Asn1 = forge.asn1.fromDer(pkcs12Der);
var pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, password);
var privateKey
for (var sci = 0; sci < pkcs12.safeContents.length; ++sci) {
var safeContents = pkcs12.safeContents[sci];
for (var sbi = 0; sbi < safeContents.safeBags.length; ++sbi) {
var safeBag = safeContents.safeBags[sbi];
if (safeBag.type === forge.pki.oids.keyBag) {
privateKey = safeBag.key;
} else if (safeBag.type === forge.pki.oids.pkcs8ShroudedKeyBag) {
privateKey = safeBag.key;
} else if (safeBag.type === forge.pki.oids.certBag) { }
}
}
var privateKeyInfoDerBuff = _privateKeyToPkcs8(privateKey);
//Import the webcrypto key
window.crypto.subtle.importKey('pkcs8', privateKeyInfoDerBuff,
{ name: "RSASSA-PKCS1-v1_5", hash: { name: "SHA-256" } }, true, ["sign"])
.then(function (cryptoKey) {
var digestToSignBuf = stringToArrayBuffer(message);
crypto.subtle.sign({ name: "RSASSA-PKCS1-v1_5" }, cryptoKey, digestToSignBuf)
.then(function (signature) {
// Other code will come here
});
})
我试过并得到了解决方案。您可以简单地使用私钥。这是:
var sha256 = forge.md.sha256.create();
sha256.update(message, 'utf8');
var signature = privateKey.sign(sha256);
var md5 = forge.md.md5.create();
md5.update((signature));
var required_digest = md5.digest().toHex().toUpperCase()
我正在使用
window.crypto.subtle.importKey
在本地主机上,它工作正常。但是当我将代码放在服务器上时,出现错误无法读取未定义的 属性 importKey。据我所知,我没有在安全的 https 连接中使用它。因此它显示错误。我在 Chrome 中检查了这个问题 crypto.subtle 是否存在不安全来源 如何为 Chrome 中的不安全来源启用 crypto.subtle?
有没有其他方法可以解决这个问题?
这是代码
var contents = e.target.result;//Data from the PKCS#12 file input
var pkcs12Der = arrayBufferToString(contents)
var pkcs12B64 = forge.util.encode64(pkcs12Der);
var pkcs12Der = forge.util.decode64(pkcs12B64);
var pkcs12Asn1 = forge.asn1.fromDer(pkcs12Der);
var pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, password);
var privateKey
for (var sci = 0; sci < pkcs12.safeContents.length; ++sci) {
var safeContents = pkcs12.safeContents[sci];
for (var sbi = 0; sbi < safeContents.safeBags.length; ++sbi) {
var safeBag = safeContents.safeBags[sbi];
if (safeBag.type === forge.pki.oids.keyBag) {
privateKey = safeBag.key;
} else if (safeBag.type === forge.pki.oids.pkcs8ShroudedKeyBag) {
privateKey = safeBag.key;
} else if (safeBag.type === forge.pki.oids.certBag) { }
}
}
var privateKeyInfoDerBuff = _privateKeyToPkcs8(privateKey);
//Import the webcrypto key
window.crypto.subtle.importKey('pkcs8', privateKeyInfoDerBuff,
{ name: "RSASSA-PKCS1-v1_5", hash: { name: "SHA-256" } }, true, ["sign"])
.then(function (cryptoKey) {
var digestToSignBuf = stringToArrayBuffer(message);
crypto.subtle.sign({ name: "RSASSA-PKCS1-v1_5" }, cryptoKey, digestToSignBuf)
.then(function (signature) {
// Other code will come here
});
})
我试过并得到了解决方案。您可以简单地使用私钥。这是:
var sha256 = forge.md.sha256.create();
sha256.update(message, 'utf8');
var signature = privateKey.sign(sha256);
var md5 = forge.md.md5.create();
md5.update((signature));
var required_digest = md5.digest().toHex().toUpperCase()